#ifndef	TFGENERATOR_H_
#define	TFGENERATOR_H_

#define	LEARN_DIFFERENCES	true		//param: indicates wheter we learn difference vectors or target states directly

#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <list>

#include "types.h"


using namespace std; 
class MREAgent;
class TFGenerator
{
public:
	TFGenerator(MREAgent* m, int an, int od, taskspec_t& spec)
		:action_number(an), obs_dim(od)
	{
		m_agent = m; 
	} 
	virtual ~TFGenerator(){}; 
	virtual void learn(const Transition* t)=0; 
	virtual Observation predict(Observation st, Action a)=0; 
	virtual double getConfidence(Observation st, Action a){return 0;} 
	virtual void batchLearn(std::list<Transition>& history)=0; 
	virtual void save(){}


public:
	const int action_number; 
	const int obs_dim; 
	MREAgent* m_agent; 
}; 

#endif

